package controller;
import model.Task;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class TaskScheduler {
private int nrOfQueues;
private int nrOfTasksPerQueue;
private List<Server> servers;
private Iterator<Task> iterator;
public TaskScheduler(int nrOfQueues, int nrOfTasksPerQueue) {
this.nrOfQueues = nrOfQueues;
this.nrOfTasksPerQueue = nrOfTasksPerQueue;
servers = new ArrayList<Server>(nrOfQueues);
}
private void distributeServers(Task task) {
if (servers.isEmpty()) {
servers.add(new Server(nrOfTasksPerQueue));
} else {
Collections.sort(servers, new Comparator<Server>() {
@Override
public int compare(Server o1, Server o2) {
if (o1.getNumberOfActiveTasks() < o2.getNumberOfActiveTasks()) {
return -1;
} else if (o1.getNumberOfActiveTasks() > o2.getNumberOfActiveTasks()) {
return 1;
}
return 0;
}
});
servers.get(0).addTask(task);
}
}
public void addTask(Task task) {
distributeServers(task);
}
}